package com.xlhl.init.common;

import com.xlhl.init.exceptipn.BusinessException;
import com.xlhl.init.exceptipn.ValidationException;

import java.io.Serializable;

/**
 * 参数校验标记接口
 * <p>
 * 实现此接口的DTO类将被AOP拦截并自动执行参数校验
 * </p>
 * 参数校验搭配 {@link com.xlhl.init.utils.ThrowUtil} 使用
 *
 * @author xlhl
 */
public interface Validatable extends Serializable {

    /**
     * 实际校验逻辑（由实现类提供）
     *
     * @throws BusinessException
     */
    void doValidate() throws BusinessException;

    /**
     * 调用上面由 子类实现的 参数校验
     *
     * @throws ValidationException
     */
    default void validate() throws ValidationException {
        try {
            doValidate();
        } catch (BusinessException e) {
            throw new ValidationException(CustomHttpCode.PARAMS_ERROR.getCode(), e.getMessage());
        }
    }
}
